import axios from 'axios'
import {
	Message
} from 'element-ui'
import { getToken } from './auth';

const http = axios.create({
	baseURL: 'http://localhost:8080/',
	timeout: 5000,
})
// 请求拦截器 - 自动添加 token
http.interceptors.request.use(
  (config) => {
    console.log(`🚀 发送请求: ${config.method?.toUpperCase()} ${config.url}`);
    
    // 输出请求参数
    if (config.data) {
      console.log('📤 请求参数:', config.data);
    }
    if (config.params) {
      console.log('📤 请求查询参数:', config.params);
    }
    
    // 排除不需要 token 的接口
    const noTokenUrls = ['/login', '/enroll', '/hospital/list']
    
    // 检查当前请求是否在排除列表中
    const shouldSkipToken = noTokenUrls.some(url => config.url.includes(url))
    
    if (!shouldSkipToken) {
      // 从 localStorage 获取 token
      const token = getToken();
      
      if (token) {
        // 关键修改：根据后端要求使用 'token' 头
        config.headers.token = token;  // 不是 Authorization
      }
    }
    
    return config;
  },
  (error) => {
    console.error('❌ 请求配置错误:', error);
    return Promise.reject(error);
  }
);
// 响应拦截器
http.interceptors.response.use(
	(response) => {
		console.log(`✅ 请求成功: ${response.status} ${response.config.url}`);
		console.log("返回数据：",response.data)
		return response;
	},
	(error) => {
		// 统一错误处理
		handleError(error);

		// 根据错误类型返回不同的值
		if (!error.response) {
			// 网络错误
			return Promise.resolve({
				code: 'NETWORK_ERROR',
				message: '网络连接失败'
			});
		}

		const status = error.response.status;
		return Promise.resolve({
			code: status,
			message: getErrorMessage(status)
		});
	}
);

// 错误处理函数
function handleError(error) {
	console.error('❌ 请求失败:', error);

	if (!error.response) {
		// 网络错误或服务器无响应
		console.error('网络错误:', error.message);
		Message.error('网络连接错误，请检查网络或服务器状态');
		return;
	}

	const status = error.response.status;
	const message = getErrorMessage(status);

	Message.error(message);

}

// 获取错误信息
function getErrorMessage(status) {
	const errorMessages = {
		400: '请求参数错误',
		401: '未授权或Token已过期，请重新登录',
		403: '拒绝访问',
		404: '请求的资源未找到',
		500: '服务器内部错误',
		502: '网关错误',
		503: '服务不可用',
		504: '网关超时'
	};

	return errorMessages[status] || `请求失败，错误码: ${status}`;
}

export default http;